package com.sihan.framework.etm.service;

import com.framework.exception.AuthException;
import com.framework.model.ApiResult;
import com.framework.model.PageResult;
import com.framework.mybatis.service.BaseService;
import com.sihan.framework.etm.dto.UserInfoDTO;
import com.sihan.framework.etm.entity.User;
import com.sihan.framework.etm.vo.LoginVO;
import com.sihan.framework.etm.vo.UserVO;

import java.util.List;
import java.util.Map;

public interface UserService extends BaseService<User, String> {

	/**
	 * 用户注册
	 *
	 * @param name     用户昵称
	 * @param username 用户名
	 * @param password 密码
	 * @param sex      性别
	 */
	void register(String name, String username, String password, Boolean sex);




	/**
	 * 获取组织所属的 在线人员 SessionId
	 * @param orgId 组织id
	 * @return 在线人员的SessionId
	 */
	List<String> getSessionIdfindByOrgId(String orgId);


	LoginVO wxlogin(String username, String password) throws AuthException;

	/**
	 * 更新密码
	 *
	 * @param oldPassword 原密码
	 * @param newPassword 新密码
	 */
	void updatePassword(String oldPassword, String newPassword);

	/**
	 * 更新用户信息
	 *
	 * @param user 用户信息
	 * @return 是否成功
	 */
	boolean updateInfo(User user);

	/**
	 * 分页查询用户信息
	 * @return 分页结果对象
	 */
	PageResult<UserVO> pageUser(UserInfoDTO dto);

	/**
	 * 添加用户信息
	 *
	 * @param user    用户信息
	 * @param roleIds 用户对应的角色Ids
	 */
	void addUser(User user, List<String> roleIds, String orgId);

	/**
	 * 更新用户信息
	 *
	 * @param user    用户信息
	 * @param roleIds 用户对应的角色Ids
	 */
	void updateUser(User user, List<String> roleIds, String orgId);

	/**
	 * 批量删除用户
	 *
	 * @param userIds 用户Ids
	 */
	void deleteUserByUserIds(List<String> userIds);

	/**
	 * 激活用户
	 * 
	 * @param userId
	 */
	void activeUserByUserId(String userId);

	/**
	 * 解锁用户
	 * 
	 * @param userId
	 */
	void unlockUserByUserId(String userId);

	/**
	 * 用户登录
	 * 
	 * @param username
	 * @param password
	 * @param hashId
	 * @throws AuthException
	 */
	LoginVO login(String username, String password, String hashId) throws AuthException;


	/**
	 * 重置密码
	 * 
	 * @param userId
	 * @param newPsd
	 */
	void resetPassword(String userId, String newPsd);

	/**
	 * 鉴别用户
	 * 
	 * @param password
	 * @return
	 */
	boolean identuser(String password);

	/**
	 * 分配角色
	 *
     * @return void
	 * @author 张荣英
	 * @date Aug 20, 2019 7:51:48 PM
	 */
	void upUserRole(List<String> roleIds, String userId);

	/**
	 * 查询通知数量
	 * 
	 * @return
	 * @return int
	 * @author 张荣英
	 * @date Aug 26, 2019 11:10:32 AM
	 */
	int getNoticeNum();

	/**
	 * 根据公司查询人员
	 * 
	 * @param companyId
	 * @return
	 * @return List<Map<String,String>>
	 * @author 张荣英
	 * @date Aug 30, 2019 10:41:34 AM
	 */
	List<Map<String, String>> getUserList(String companyId);

	/**
	 * 
	 * @description 通过iccard或者人脸识别用户
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月10日
	 * @param type 1:iccard,2:face
	 * @return Long
	 */
	@SuppressWarnings("rawtypes")
	ApiResult getOperatorUserIdFromHardware(Integer type, UserVO param);
	
	/**
	 * 
	 * @description 更新用户icCard
	 * @param userId
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月18日
	 * @return ApiResult
	 */
	@SuppressWarnings("rawtypes")
	ApiResult updateIcCardInfo(String userId);
	
	/**
	 * 
	 * @description 跟新用户脸部识别
	 * @param userId
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月18日
	 * @return ApiResult
	 */
	@SuppressWarnings("rawtypes")
	ApiResult updateFaceInfo(String userId,String face);
	
	/**
	 * 
	 * @description  存储脸部图片
	 * @param userId
	 * @param base64Img
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月22日
	 * @return String
	 */
	//String saveTempFaceImg(Long userId, String base64Img);
	
	/**
	 * 
	 * @description  查询用户信息
	 * @param userId
	 * @return
	 * @auther 韩兵
	 * @Date 2020年7月24日
	 * @return UserVO
	 */
	UserVO selectUserByUserId(String userId);

}
